import { VXETable } from 'vxe-table';
import FilterInput from './filter/FilterInput.vue';
import FilterContent from './filter/FilterContent.vue';

VXETable.renderer.add('FilterInput', {
  // 筛选模板
  renderFilter(_renderOpts, params) {
    return [<FilterInput params={params}></FilterInput>];
  },
  // 重置数据方法
  filterResetMethod(params) {
    const { options } = params;
    options.forEach(option => {
      // eslint-disable-next-line no-param-reassign
      option.data = '';
    });
  },
  // 重置筛选复原方法（当未点击确认时，该选项将被恢复为默认值）
  filterRecoverMethod({ option }) {
    // eslint-disable-next-line no-param-reassign
    option.data = '';
  },
  // 筛选方法
  filterMethod(params) {
    const { option, row, column } = params;
    const { data } = option;
    const cellValue = row[column.property];
    if (cellValue) {
      return cellValue.indexOf(data) > -1;
    }
    return false;
  }
});

VXETable.renderer.add('FilterContent', {
  // 不显示底部按钮，使用自定义的按钮
  showFilterFooter: false,
  // 筛选模板
  renderFilter(_renderOpts, params) {
    return <FilterContent params={params}></FilterContent>;
  },
  // 重置数据方法
  filterResetMethod(params) {
    const { options } = params;
    options.forEach(option => {
      // eslint-disable-next-line no-param-reassign
      option.data = { vals: [], sVal: '' };
    });
  },
  // 筛选数据方法
  filterMethod(params) {
    const { option, row, column } = params;
    const { vals, sVal } = option.data;
    let cellValue = row[column.field];
    if (sVal === '') {
      return vals.includes(cellValue);
    }
    if (cellValue) {
      cellValue = String(cellValue);
      return cellValue.indexOf(sVal) > -1;
    }
    return false;
  }
});
